import { Transform, Type } from 'class-transformer';
import {
  ArrayNotEmpty,
  IsArray,
  IsIn,
  IsInt,
  IsNotEmpty,
  IsNumber,
  IsOptional,
  Min,
} from 'class-validator';

/**
 * 新增字典数据
 * */
export class create {
  @IsNotEmpty({ message: '“dictLabel” 不能为空' })
  readonly dictLabel: string;

  @IsOptional()
  @Type(() => Number)
  @IsNumber({ allowNaN: false }, { message: '“dictSort” 必须是数字' })
  readonly dictSort?: 0;

  @IsNotEmpty({ message: '“dictType” 不能为空' })
  readonly dictType: string;

  @IsNotEmpty({ message: '“dictValue” 不能为空' })
  readonly dictValue: string;

  @IsNotEmpty({ message: '“listClass” 不能为空' })
  @IsIn(['default', 'primary', 'success', 'info', 'warning', 'danger'], {
    message: '"listClass" 类型错误',
  })
  readonly listClass: string;

  @IsOptional()
  readonly cssClass?: string;

  @IsOptional()
  readonly remark?: string;

  @IsOptional()
  @Type(() => Number)
  @IsIn([0, 1, true, false], { message: 'status 只能是 0 或 1' })
  readonly status?: 0;

  @IsOptional()
  @Type(() => Number)
  @Transform(({ value }) => (value ? 'Y' : 'N'))
  @IsIn(['N', 'Y'], { message: 'isDefault 只能是 0 或 1' })
  readonly isDefault?: 'N' | 'Y';
}
/**
 * 修改字典数据
 * */
export class update {
  @IsNotEmpty({ message: '“dictCode” 不能为空' })
  @Type(() => Number)
  @IsNumber({ allowNaN: false }, { message: '“dictCode” 必须是数字' })
  readonly dictCode: number;

  @IsNotEmpty({ message: '“dictType” 不能为空' })
  readonly dictType: string;

  @IsNotEmpty({ message: '“dictLabel” 不能为空' })
  readonly dictLabel: string;

  @IsNotEmpty({ message: '“dictValue” 不能为空' })
  readonly dictValue: string;

  @IsOptional()
  @Type(() => Number)
  @IsNumber({ allowNaN: false }, { message: '“dictSort” 必须是数字' })
  readonly dictSort?: 0;

  @IsOptional()
  @Type(() => Number)
  @IsIn([0, 1, true, false], { message: 'status 只能是 0 或 1' })
  readonly status?: 0;

  @IsNotEmpty({ message: '“listClass” 不能为空' })
  @IsIn(['default', 'primary', 'success', 'info', 'warning', 'danger'], {
    message: '"listClass" 类型错误',
  })
  readonly listClass: string;

  @IsOptional()
  readonly cssClass?: string;

  @IsOptional()
  readonly remark?: string;
}
/**
 * 查询字典数据列表
 * */
export class getList {
  @IsOptional()
  @Type(() => Number)
  @IsInt({ message: 'pageNum 必须是整数' }) // 验证为整数
  @Min(1, { message: 'pageNum 必须大于等于 1' }) // 可选的限制条件
  readonly pageNum = 1;

  @IsOptional()
  @Type(() => Number)
  @IsInt({ message: 'pageNum 必须是整数' }) // 验证为整数
  readonly pageSize = 10;

  @IsNotEmpty({ message: 'dictType 不能为空' })
  readonly dictType: string;
}
/**
 * 删除字典数据
 * */
export class deleteDictCode {
  @IsNotEmpty({ message: 'dictCodes 必填' })
  @Transform(({ value }) => value.split(',').map(Number), { toClassOnly: true })
  @IsArray({ message: 'dictCodes 必须是一个数组' })
  @ArrayNotEmpty({ message: 'dictCodes 数组不能为空' })
  @IsInt({ each: true, message: 'dictCodes 数组中的每个元素都必须是整数' })
  readonly dictCodes: number[];
}
